package com.fr.lintcode;

import org.junit.Test;

/**
*作者：furong
*日期：2017年1月23日
*时间：上午11:15:40
*/
public class Q191 {
    /**
     * @param nums: an array of integers
     * @return: an integer
     */
    public int maxProduct(int[] nums) {
        if (nums == null || nums.length <= 0) {
            return 0;
        }
        int length = nums.length;
        // 正
        int max[] = new int[length];
        // 负
        int min[] = new int[length];
        max[0] = nums[0];
        min[0] = nums[0];
        for (int i = 1; i < length; i++) {
            if (nums[i] == 0) {
                max[i] = 0;
                min[i] = 0;
            } else if (nums[i] > 0) {
                max[i] = Math.max(max[i - 1], 1) * nums[i];
                min[i] = Math.min(min[i - 1], 0) * nums[i];
            } else {
                min[i] = Math.max(max[i - 1], 1) * nums[i];
                max[i] = Math.min(min[i - 1], 0) * nums[i];
            }
        }
        int rs = Integer.MIN_VALUE;
        for (int i : max) {
            if (rs < i) {
                rs = i;
            }
        }
        return rs;
    }

    @Test
    public void testA() {
        int[] nums = { -1, -1, -3, -2 };
        System.out.println(maxProduct(nums));
    }
}
